package cn.anecansaitin.industrialization_expansion.api.common.item;

import cn.anecansaitin.industrialization_expansion.common.ToolModuleType;
import com.ibm.icu.impl.Pair;
import net.minecraft.enchantment.Enchantment;
import net.minecraft.enchantment.EnchantmentType;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.item.ItemStack;
import net.minecraft.item.crafting.Ingredient;
import net.minecraft.util.ActionResult;
import net.minecraft.world.World;
import net.minecraftforge.common.ToolType;

import java.util.*;

/**
 * 工具模块接口，所有的模块必须实现该接口并继承Item
 */
public interface IToolModule {
    /**
     * @return 能量容量
     */
    default int getEnergy(ItemStack stack) {
        return 0;
    }

    /**
     * @return 耐久上限
     */
    default int getDurability(ItemStack stack) {
        return 0;
    }

    /**
     * @return 挖掘速度
     */
    default float getDestroySpeed(ItemStack stack) {
        return 0f;
    }

    /**
     * @return 是否有火焰保护
     */
    default boolean isFireImmune(ItemStack stack) {
        return false;
    }

    /**
     * @return 攻击伤害
     */
    default float getAttackDamage(ItemStack stack) {
        return 0;
    }

    /**
     * @return 攻击速度
     */
    default float getAttackSpeed(ItemStack stack) {
        return 0;
    }

    /**
     * @return 经验修补倍率
     */
    default float getXPRepairRatio(ItemStack stack) {
        return 2;
    }

    /**
     * @return 部件的原料名称
     * 用于工具修复
     */
    default Ingredient getMaterial(ItemStack stack) {
        return Ingredient.of(ItemStack.EMPTY);
    }

    /**
     * @return 该物品的模块类型
     */
    default ToolModuleType getModuleType(ItemStack stack) {
        return ToolModuleType.DECORATION;
    }

    /**
     * @return 包含工具类型及其等级的列表
     * 可用于定义一个工具有多个工具类型和等级
     */
    default List<Pair<ToolType, Integer>> getToolType(ItemStack stack) {
        return new ArrayList<>();
    }

    /**
     * @return 能否造成破盾效果
     * 破盾效果：原版斧头攻击盾牌使其进入冷却而暂时无法使用
     */
    default boolean canDisabledShield(ItemStack stack) {
        return false;
    }

    /**
     * @return 模块渲染时的RGB着色
     */
    default int getRenderColor() {
        return 0xffffff;
    }

    /**
     * @return 模块的名字
     */
    default String getModelName(ItemStack stack) {
        return "miss";
    }

    /**
     * @return 模块的模型
     */
    default String getIcon() {
        return "miss";
    }

    /**
     * @return 附魔能力
     */
    default int getEnchantability(ItemStack stack) {
        return 0;
    }

    /**
     * @return 可用附魔
     */
    default Set<Enchantment> getEnchantable(ItemStack stack) {
        return new HashSet<>();
    }

    /**
     * @return 可用附魔类型
     */
    default Set<EnchantmentType> getEnchantmentTypes(ItemStack stack) {
        return new HashSet<>();
    }
}
